Jackson এর জন্য Unit Test তৈরি করা

Java Technologies - জ্যাকসন (Jackson) - Jackson এর জন্য Unit Testing
255

Jackson এর জন্য Unit Test তৈরি করতে আমরা সাধারণত JUnit এবং ObjectMapper ব্যবহার করি। Unit Test-এ আমরা Jackson-এর serialization (Java থেকে JSON) এবং deserialization (JSON থেকে Java) প্রক্রিয়াগুলো যাচাই করি।


Unit Test এর ধাপসমূহ

  1. Dependency Management: JUnit এবং Jackson এর প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করা।
  2. Test Setup: ObjectMapper ইন্সট্যান্স তৈরি করা।
  3. Serialization Test: Java Object থেকে JSON-এ সঠিক রূপান্তর নিশ্চিত করা।
  4. Deserialization Test: JSON থেকে Java Object-এ সঠিক রূপান্তর নিশ্চিত করা।
  5. Edge Case Handling: অপ্রত্যাশিত বা ভুল ডেটার জন্য টেস্টিং।

Maven Dependencies

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.10.0</version>
    <scope>test</scope>
</dependency>

Java Model Class

import com.fasterxml.jackson.annotation.JsonProperty;

public class User {
    @JsonProperty("user_name")
    private String name;
    private int age;

    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters এবং Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age && name.equals(user.name);
    }
}

Unit Test Code

১. Serialization Test

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class UserSerializationTest {

    @Test
    public void testSerialization() throws Exception {
        // Arrange
        User user = new User("John Doe", 25);
        ObjectMapper objectMapper = new ObjectMapper();

        // Act
        String json = objectMapper.writeValueAsString(user);

        // Assert
        String expectedJson = "{\"user_name\":\"John Doe\",\"age\":25}";
        assertEquals(expectedJson, json);
    }
}

২. Deserialization Test

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class UserDeserializationTest {

    @Test
    public void testDeserialization() throws Exception {
        // Arrange
        String json = "{\"user_name\":\"John Doe\",\"age\":25}";
        ObjectMapper objectMapper = new ObjectMapper();

        // Act
        User user = objectMapper.readValue(json, User.class);

        // Assert
        User expectedUser = new User("John Doe", 25);
        assertEquals(expectedUser, user);
    }
}

৩. Edge Case Test

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertThrows;

public class UserEdgeCaseTest {

    @Test
    public void testInvalidJson() {
        // Arrange
        String invalidJson = "{\"user_name\":\"John Doe\",\"age\":\"invalid\"}";
        ObjectMapper objectMapper = new ObjectMapper();

        // Act and Assert
        assertThrows(Exception.class, () -> objectMapper.readValue(invalidJson, User.class));
    }

    @Test
    public void testMissingField() throws Exception {
        // Arrange
        String partialJson = "{\"user_name\":\"John Doe\"}";
        ObjectMapper objectMapper = new ObjectMapper();

        // Act
        User user = objectMapper.readValue(partialJson, User.class);

        // Assert
        User expectedUser = new User("John Doe", 0); // Default age is 0
        assertEquals(expectedUser, user);
    }
}

৪. Custom Serializer/Deserializer Test

Custom Serializer
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

public class CustomUserSerializer extends JsonSerializer<User> {
    @Override
    public void serialize(User user, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartObject();
        gen.writeStringField("full_name", user.getName().toUpperCase());
        gen.writeNumberField("user_age", user.getAge());
        gen.writeEndObject();
    }
}
Custom Serializer Test
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class CustomSerializerTest {

    @Test
    public void testCustomSerializer() throws Exception {
        // Arrange
        User user = new User("John Doe", 25);
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule module = new SimpleModule();
        module.addSerializer(User.class, new CustomUserSerializer());
        objectMapper.registerModule(module);

        // Act
        String json = objectMapper.writeValueAsString(user);

        // Assert
        String expectedJson = "{\"full_name\":\"JOHN DOE\",\"user_age\":25}";
        assertEquals(expectedJson, json);
    }
}

পরীক্ষার কাভারেজ

  1. Serialization: Java Object → JSON।
  2. Deserialization: JSON → Java Object।
  3. Edge Cases: যেমন ভুল ডেটা টাইপ, মিসিং ফিল্ড।
  4. Custom Serializer/Deserializer।
  5. Exception Handling।

  1. JUnit: Jackson-এর serialization এবং deserialization প্রক্রিয়া যাচাই করার জন্য সহজ এবং কার্যকর।
  2. Edge Cases: ভুল JSON ডেটা এবং মিসম্যাচ ফিল্ডের জন্য পরীক্ষা করুন।
  3. Custom Logic: কাস্টম Serializer/Deserializer এর জন্য টেস্ট রাইটিং অত্যন্ত গুরুত্বপূর্ণ।
  4. Automation: Unit Test কোড Jackson-এর সাথে কাজ করার সময় সঠিকতা নিশ্চিত করে এবং বাগ কমায়।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...